//package net.ecpt.clm.services;
//
//import java.util.List;
//import java.util.Map;
//
//import org.ofbiz.base.crypto.HashCrypt;
//import org.ofbiz.base.util.Debug;
//import org.ofbiz.base.util.UtilDateTime;
//import org.ofbiz.base.util.UtilMisc;
//import org.ofbiz.base.util.UtilProperties;
//import org.ofbiz.base.util.UtilValidate;
//import org.ofbiz.base.util.cache.UtilCache;
//import org.ofbiz.entity.Delegator;
//import org.ofbiz.entity.GenericEntityException;
//import org.ofbiz.entity.GenericValue;
//import org.ofbiz.entity.util.EntityUtil;
//import org.ofbiz.service.DispatchContext;
//import org.ofbiz.service.GenericServiceException;
//import org.ofbiz.service.LocalDispatcher;
//import org.ofbiz.service.ServiceUtil;
//
//import net.qywx.approval.QyWxUtils;
//
//public class QyWxLoginServices {
//
//    public static String module = QyWxLoginServices.class.getName();
////  # 60 min  
////  expireTime=3600000 
//
////  # 120 min  
////  expireTime=7200000 
//
//    private static final UtilCache<String, String> coQyWxCache = UtilCache.createUtilCache("co.qywx.login", 0, 0,
//	    7200000, false, true);
//
//    private static final UtilCache<String, String> coCxCache = UtilCache.createUtilCache("co.qywx.login", 0, 0, 7200000,
//	    false, true);
//
//    /**
//     * 获取access_token
//     */
//    public static Map<String, Object> getWxLoginAccessToken(DispatchContext ctx,
//	    Map<String, ? extends Object> context) {
//	// 微信端登录code
//	Map<String, Object> result = ServiceUtil.returnSuccess();
//	Delegator delegator = ctx.getDelegator();
//
//	// 普冷
//	String corpid = "ww5899a4219469fd55";
//	String corpsecret = "dNhklRKj7Q2nQAxEp6mJSuGN4mRlh455R3ywZujJnaQ";
//	try {
//	    GenericValue gv_corpid = delegator.findOne("Enumeration", UtilMisc.toMap("enumId", "QyWx_corpid"), true);
//	    if (UtilValidate.isNotEmpty(gv_corpid)) {
//		corpid = gv_corpid.getString("description");
//	    }
//	    GenericValue gv_corpsecret = delegator.findOne("Enumeration", UtilMisc.toMap("enumId", "user_agentsecret"),
//		    true);
//	    if (UtilValidate.isNotEmpty(gv_corpsecret)) {
//		corpsecret = gv_corpsecret.getString("description");
//	    }
//
//	} catch (GenericEntityException e) {
//	    Debug.logError(e.getMessage(), module);
//	}
//	String access_token = QyWxUtils.gettoken(corpid, corpsecret);
//
//	result.put("accessToken", access_token);
//	return result;
//    }
//
//    @SuppressWarnings("rawtypes")
//    private static String getWxLoginAccessToken(DispatchContext ctx) {
//	Delegator delegator = ctx.getDelegator();
//	LocalDispatcher dispatcher = ctx.getDispatcher();
//	String access_token = (String) coQyWxCache.get("access_token");
//	// 每俩小时调用一次.
//	if (UtilValidate.isEmpty(access_token)) {
//	    try {
//		GenericValue userLogin = delegator.findOne("UserLogin", UtilMisc.toMap("userLoginId", "system"), true);
//
//		Map service_context = UtilMisc.toMap("userLogin", userLogin);
//		Map service_result = dispatcher.runSync("getWxLoginAccessToken", service_context);
//		access_token = (String) service_result.get("accessToken");
//		coQyWxCache.put("access_token", access_token);
//	    } catch (GenericEntityException e) {
//		Debug.logError(e.getMessage(), module);
//	    } catch (GenericServiceException e) {
//		Debug.logError(e.getMessage(), module);
//	    }
//	}
//	return access_token;
//    }
//
//    public static Map<String, Object> createHrCourseAttendaceWx(DispatchContext ctx,
//	    Map<String, ? extends Object> context) {// (Map<String,
//	Map<String, Object> result = ServiceUtil.returnSuccess();
//	Delegator delegator = ctx.getDelegator();
//	String code = (String) context.get("code");
//	String courseId = (String) context.get("courseId");
//	String message = "";
//	try {
//	    String access_token = getWxLoginAccessToken(ctx);
//	    Debug.log("access_token = " + access_token);
//	    Debug.log("code = " + code);
//	    String userId = QyWxUtils.convertToUserid(access_token, code);
//	    Debug.log("userId = " + userId);
//	    if (code.equals("testadmin"))
//		userId = "ChenRui";
//	    if (UtilValidate.isEmpty(userId)) {
//		message = "您不是该企业的人员,无法培训签到!";
//		result.put("authCode", "301");
//		result.put("errorMessage", message);
//		return result;
//	    }
//
//	    GenericValue wxUser = EntityUtil
//		    .getFirst(delegator.findByAnd("HrWxUser", UtilMisc.toMap("userId", userId), null, false));
//	    if (UtilValidate.isEmpty(wxUser)) {
//		message = "您没有被同步到花名册中,请通知管理员先同步花名册,建立职员信息!";
//		result.put("authCode", "301");
//		result.put("errorMessage", message);
//		return result;
//	    }
//
//	    GenericValue person = EntityUtil
//		    .getFirst(delegator.findByAnd("Person", UtilMisc.toMap("wxUserId", userId), null, false));
//	    if (UtilValidate.isEmpty(person)) {
//		message = "您没有被加入到职员信息中,请通知管理员建立职员信息!";
//		result.put("authCode", "301");
//		result.put("errorMessage", message);
//		return result;
//	    }
//
//	    GenericValue course = delegator.findOne("HrCourse", UtilMisc.toMap("id", courseId), false);
//	    if (UtilValidate.isEmpty(course)) {
//		message = "课程不存在!";
//		result.put("authCode", "303");
//		result.put("errorMessage", message);
//		return result;
//	    }
//
//	    String partyId = person.getString("partyId");
//
//	    List<GenericValue> entityList = delegator.findByAnd("HrCourseAttendace",
//		    UtilMisc.toMap("partyId", partyId, "courseId", courseId), null, false);
//	    GenericValue entity = null;
//	    String id = "";
//	    if (UtilValidate.isEmpty(entityList)) {
//		entity = delegator.makeValue("HrCourseAttendace");
//		id = delegator.getNextSeqId("HrCourseAttendace");
//		entity.set("id", id);
//		entity.set("partyId", partyId);
//		entity.set("courseId", courseId);
//		entity.set("createDate", UtilDateTime.nowTimestamp());
//		entity.create();
//	    } else {
//		entity = EntityUtil.getFirst(entityList);
//		id = entity.getString("id");
//		entity.set("createDate", UtilDateTime.nowTimestamp());
//		entity.store();
//	    }
//	    result.put("id", id);
//	} catch (GenericEntityException e) {
//	    Debug.logError(e.getMessage(), module);
//	}
//	return result;
//    }
//
//    private static String getCxLoginAccessToken(Delegator delegator,String appid,String secret) throws GenericEntityException {
//	String access_token = (String) coCxCache.get("access_token");
//	// 每俩小时调用一次.
//	if (UtilValidate.isEmpty(access_token)) {
//	    GenericValue gv_corpsecret = delegator.findOne("Enumeration", UtilMisc.toMap("enumId", "user_appletssecret"),true);
//	    if (UtilValidate.isNotEmpty(gv_corpsecret)) {
//		secret = gv_corpsecret.getString("description");
//	    }
//	    access_token = QyWxUtils.getCxToken(appid, secret);
//	    coCxCache.put("access_token", access_token);
//	}
//	return access_token;
//    }
//
//    public static Map<String, Object> registerCxLogin(DispatchContext ctx, Map<String, ? extends Object> context) {// (Map<String,
//	Map<String, Object> result = ServiceUtil.returnSuccess();
//	Delegator delegator = ctx.getDelegator();
//	LocalDispatcher dispatcher = ctx.getDispatcher();
//	String code = (String) context.get("code");
//	String sessionKey = (String) context.get("sessionKey");
//	String message = "";
//	try {
////	    String appid = "wx6d53f97eb4e66c41";
////	    String secret = "f196049d6db50e99351141f03fa5e20b";
//	    String corpid = "ww5899a4219469fd55";
//	    String secret = "mMQz5Iz2_ke_QOfwzR6PHmauR8teJmlEsGdw_AsRlZM"; //企业微信中 获取到的小程序密钥
//	    String token2 = getCxLoginAccessToken(delegator,corpid,secret);
//	    String userId = QyWxUtils.jscode2session(token2, code);
//	    System.out.println(userId);
//	    Debug.log("userId = " + userId);
//	    if (UtilValidate.isEmpty(userId)) {
//		message = "您不是该企业的人员,无法登陆系统!";
//		result.put("authCode", "301");
//		result.put("errorMessage", message);
//		return result;
//	    }
//	    GenericValue wxUser = EntityUtil
//		    .getFirst(delegator.findByAnd("HrWxUser", UtilMisc.toMap("userId", userId), null, false));
//	    if (UtilValidate.isEmpty(wxUser)) {
//		message = "您没有被同步到花名册中,请通知管理员先同步花名册,建立职员信息!";
//		result.put("authCode", "301");
//		result.put("errorMessage", message);
//		return result;
//	    }
//
//	    GenericValue person = EntityUtil
//		    .getFirst(delegator.findByAnd("Person", UtilMisc.toMap("wxUserId", userId), null, false));
//	    if (UtilValidate.isEmpty(person)) {
//		message = "您没有被加入到职员信息中,请通知管理员建立职员信息!";
//		result.put("authCode", "301");
//		result.put("errorMessage", message);
//		return result;
//	    }
//
//	    String userLoginId = "qywx_" + userId;
//	    String password = "PL2020";
//	    GenericValue user = EntityUtil.getFirst(delegator.findByAnd("UserLogin",
//		    UtilMisc.toMap("partyId", person.getString("partyId")), null, false));
//
//	    if (UtilValidate.isEmpty(user)) {
//		GenericValue currentUserLogin = delegator.makeValue("UserLogin",
//			UtilMisc.toMap("userLoginId", userLoginId));
//		currentUserLogin.set("currentPassword", HashCrypt.cryptUTF8(getHashType(), null, password));
//		currentUserLogin.set("enabled", "Y");
//		currentUserLogin.set("partyId", person.getString("partyId"));
//		currentUserLogin.create();
//		// 创建权限
//		GenericValue userGroup = delegator.makeValue("UserLoginSecurityGroup", UtilMisc.toMap("userLoginId",
//			userLoginId, "groupId", "8400", "fromDate", UtilDateTime.nowTimestamp()));
//		userGroup.create();
//		// 登录
//		result = dispatcher.runSync("getCodeLogin",
//			UtilMisc.toMap("request", context.get("request"), "response", context.get("response"),
//				"username", userLoginId, "aesPassword", password, "isCheckKey", "N", "sessionKey",
//				sessionKey));
//	    } else {
//		userLoginId = user.getString("userLoginId");
//
//		result = dispatcher.runSync("getCodeLogin",
//			UtilMisc.toMap("request", context.get("request"), "response", context.get("response"),
//				"username", userLoginId, "isNoPassword", "Y", "isCheckKey", "N", "sessionKey",
//				sessionKey));
//	    }
//
//	} catch (GenericEntityException e) {
//	    Debug.logError(e.getMessage(), module);
//	} catch (GenericServiceException e) {
//	    Debug.logError(e.getMessage(), module);
//	}
//	return result;
//    }
//
//    public static Map<String, Object> registerWxLogin(DispatchContext ctx, Map<String, ? extends Object> context) {// (Map<String,
//	Map<String, Object> result = ServiceUtil.returnSuccess();
//	Delegator delegator = ctx.getDelegator();
//	LocalDispatcher dispatcher = ctx.getDispatcher();
//	String code = (String) context.get("code");
//	String sessionKey = (String) context.get("sessionKey");
//	String message = "";
//	try {
//	    String access_token = getWxLoginAccessToken(ctx);
//	    Debug.log("access_token = " + access_token);
//	    Debug.log("code = " + code);
//	    String userId = QyWxUtils.convertToUserid(access_token, code);
//	    Debug.log("userId = " + userId);
//	    if (UtilValidate.isEmpty(userId)) {
//		userId = "ChenRui";
//	    }
//	    if (UtilValidate.isEmpty(userId)) {
//		message = "您不是该企业的人员,无法登陆系统!";
//		result.put("authCode", "301");
//		result.put("errorMessage", message);
//		return result;
//	    }
//	    GenericValue wxUser = EntityUtil
//		    .getFirst(delegator.findByAnd("HrWxUser", UtilMisc.toMap("userId", userId), null, false));
//	    if (UtilValidate.isEmpty(wxUser)) {
//		message = "您没有被同步到花名册中,请通知管理员先同步花名册,建立职员信息!";
//		result.put("authCode", "301");
//		result.put("errorMessage", message);
//		return result;
//	    }
//
//	    GenericValue person = EntityUtil
//		    .getFirst(delegator.findByAnd("Person", UtilMisc.toMap("wxUserId", userId), null, false));
//	    if (UtilValidate.isEmpty(person)) {
//		message = "您没有被加入到职员信息中,请通知管理员建立职员信息!";
//		result.put("authCode", "301");
//		result.put("errorMessage", message);
//		return result;
//	    }
//
//	    String userLoginId = "qywx_" + userId;
//	    String password = "PL2020";
//	    GenericValue user = EntityUtil.getFirst(delegator.findByAnd("UserLogin",
//		    UtilMisc.toMap("partyId", person.getString("partyId")), null, false));
//
//	    if (UtilValidate.isEmpty(user)) {
//		GenericValue currentUserLogin = delegator.makeValue("UserLogin",
//			UtilMisc.toMap("userLoginId", userLoginId));
//		currentUserLogin.set("currentPassword", HashCrypt.cryptUTF8(getHashType(), null, password));
//		currentUserLogin.set("enabled", "Y");
//		currentUserLogin.set("partyId", person.getString("partyId"));
//		currentUserLogin.create();
//		// 创建权限
//		GenericValue userGroup = delegator.makeValue("UserLoginSecurityGroup", UtilMisc.toMap("userLoginId",
//			userLoginId, "groupId", "8400", "fromDate", UtilDateTime.nowTimestamp()));
//		userGroup.create();
//		// 登录
//		result = dispatcher.runSync("getCodeLogin",
//			UtilMisc.toMap("request", context.get("request"), "response", context.get("response"),
//				"username", userLoginId, "aesPassword", password, "isCheckKey", "N", "sessionKey",
//				sessionKey));
//	    } else {
//		userLoginId = user.getString("userLoginId");
//
//		result = dispatcher.runSync("getCodeLogin",
//			UtilMisc.toMap("request", context.get("request"), "response", context.get("response"),
//				"username", userLoginId, "isNoPassword", "Y", "isCheckKey", "N", "sessionKey",
//				sessionKey));
//	    }
//
//	} catch (GenericEntityException e) {
//	    Debug.logError(e.getMessage(), module);
//	} catch (GenericServiceException e) {
//	    Debug.logError(e.getMessage(), module);
//	}
//	return result;
//    }
//
//    private static String getHashType() {
//	String hashType = UtilProperties.getPropertyValue("security.properties", "password.encrypt.hash.type");
//
//	if (UtilValidate.isEmpty(hashType)) {
//	    Debug.logWarning("Password encrypt hash type is not specified in security.properties, use SHA", module);
//	    hashType = "SHA";
//	}
//
//	return hashType;
//    }
//
//}
